<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Job Control Language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Job_Control_Language"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Job_Control_Language rootpage-Job_Control_Language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Job Control Language</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">This article is about IBM mainframe job control language. For Unix-based systems, see <a href="Job_control_(Unix)" title="Job control (Unix)">job control (Unix)</a>. For general computing job control, see <a href="Job_control_(computing)" title="Job control (computing)">job control</a>.</div>
<p><b>Job Control Language</b> (<b>JCL</b>) is <a href="Programming_language" title="Programming language">programming language</a> for <a href="Script_(computing)" class="mw-redirect" title="Script (computing)">scripting</a> and launching <a href="Batch_processing" title="Batch processing"> batch jobs</a> on <a href="IBM_mainframe" title="IBM mainframe">IBM mainframe</a> <a href="Computer" title="Computer">computers</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> JCL code determines which programs to run, using which files and devices for input or output.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Parameters in the JCL can also provide accounting information for tracking the resources used by a job as well as which machine the job should run on.
</p><p>There are two major variants based on host platform and associated lineage. One version is available on the platform lineage that starts with <a href="DOS/360" class="mw-redirect" title="DOS/360">DOS/360</a> and has progressed to <a href="Z/VSE" class="mw-redirect" title="Z/VSE">z/VSE</a>. The other version starts with <a href="OS/360" class="mw-redirect" title="OS/360">OS/360</a> and continues to <a href="Z/OS" title="Z/OS">z/OS</a> which includes <a href="Job_Entry_Subsystem_2/3" title="Job Entry Subsystem 2/3">JES</a> extensions, <a href="#Job_Entry_Control_Language">Job Entry Control Language (JECL)</a>. The variants share basic syntax and concepts but have significant differences.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> The <a href="VM_(operating_system)" title="VM (operating system)">VM operating system</a> does not have JCL as such; the <a href="CP/CMS" title="CP/CMS">CP and CMS</a> components each have <a href="Command_language" title="Command language">command languages</a>.
</p><p>The term <i>job control language</i> refers to any programming language for <a href="Job_control_(computing)" title="Job control (computing)">job control</a>; not just the IBM mainframe technology with the same name.<sup id="cite_ref-stallings_4-0" class="reference"><a href="#cite_note-stallings-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Terminology">Terminology</h2></div>
<p>JCL-specific terminology includes:
</p>
<dl><dt>Data set</dt></dl>
<p>A file; either temporary or permanent; located on a disk drive, tape storage, or other device.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>
<dl><dt>Partitioned data set (PDS)</dt></dl>
<p>A collection of files; commonly used to store textual data such as source code, assembler macros (SYS1.MACLIB), system configuration (SYS1.PARMLIB), reusable JCL procedures (SYS1.PROCLIB), etc. As a collection of files, a PDS is like to an <a href="Archive_file" title="Archive file">archive file</a> (<a href="ZIP_(file_format)" title="ZIP (file format)">ZIP</a>, <a href="Tar_(computing)" title="Tar (computing)">TAR</a>, etc.) which in turn is like a <a href="File_system" title="File system">file system</a> <a href="Directory_(computing)" title="Directory (computing)">directory</a>. A PDS can contain <a href="Executable" title="Executable">executable</a> code (load modules or program objects) which makes a PDS like a <a href="Ar_(Unix)" title="Ar (Unix)">Unix-based static library</a>. A member, once stored, cannot be updated although a member can be deleted and replaced, such as via the <a href="IEBUPDTE" class="mw-redirect" title="IEBUPDTE">IEBUPDTE</a> utility.<sup id="cite_ref-mcq-pds_7-0" class="reference"><a href="#cite_note-mcq-pds-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Since the 1989 release of MVS DFP 3.2, an enhanced version, partitioned data set extended (PDSE) has been available.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<dl><dt>Member</dt></dl>
<p>A file (data set) in a PDS. A member can be accessed by specifying the name of the PDS with the member name in parentheses. For example, the system macro GETMAIN in SYS1.MACLIB can be referenced as <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">SYS1.MACLIB(GETMAIN)</code>.<sup id="cite_ref-mcq-pds_7-1" class="reference"><a href="#cite_note-mcq-pds-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<dl><dt>Unix system services (USS)</dt></dl>
<p>A complete Unix environment running as part of the MVS base control program. It allows Unix files, scripts, tasks, and programs to run on a mainframe in a POSIX-compliant Unix environment without virtualization.
</p>
<div class="mw-heading mw-heading2"><h2 id="Motivation">Motivation</h2></div>
<p>Originally, mainframe systems were oriented toward <a href="Batch_processing" title="Batch processing">batch processing</a>. Many batch jobs require setup, with specific requirements for <a href="Main_storage" class="mw-redirect" title="Main storage">main storage</a>, and dedicated devices such as <a href="Magnetic_tape" title="Magnetic tape">magnetic tapes</a>, private disk volumes, and printers set up with special forms.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> JCL was developed as a means of ensuring that all required resources are available before a job is scheduled to run. For example, many systems, such as <a href="Linux" title="Linux">Linux</a> allow identification of required datasets to be specified on the <a href="Command-line_interface" title="Command-line interface">command line</a>, and therefore subject to substitution by the <a href="Shell_(computing)" title="Shell (computing)">shell</a>, or generated by the program at run-time.
</p><p>On these systems the <a href="Operating_system" title="Operating system">operating system</a> <a href="Job_scheduler" title="Job scheduler">job scheduler</a> has little or no idea of the requirements of the job. In contrast, JCL explicitly specifies all required datasets and devices. The scheduler can pre-allocate the resources prior to releasing the job to run. This helps to avoid "<a href="Deadlock_(computer_science)" title="Deadlock (computer science)">deadlock</a>", where job A holds resource R1 and requests resource R2, while concurrently running job B holds resource R2 and requests R1. In such cases the only solution is for the <a href="Computer_operator" title="Computer operator">computer operator</a> to terminate one of the jobs, which then needs to be restarted. With job control, if job A is scheduled to run, job B will not be started until job A completes or releases the required resources.
</p>
<div class="mw-heading mw-heading2"><h2 id="Features_common_to_DOS_and_OS_JCL">Features common to DOS and OS JCL</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Jobs,_steps_and_procedures">Jobs, steps and procedures</h3></div>
<p>For both DOS and OS the unit of work is the <a href="Job_stream" title="Job stream">job</a>. A job consists of one or several steps, each of which is a request to run one specific program. For example, before the days of <a href="Relational_database" title="Relational database">relational databases</a>, a job to produce a printed report for management might consist of the following steps: a user-written program to select the appropriate records and copy them to a temporary file; <a href="Sorting_algorithm" title="Sorting algorithm">sort</a> the temporary file into the required order, usually using a general-purpose utility; a user-written program to present the information in a way that is easy for the end-users to read and includes other useful information such as sub-totals; and a user-written program to format selected pages of the end-user information for display on a monitor or terminal.
</p><p>In both DOS and OS JCL the first "card" must be the JOB card, which:<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Identifies the job.</li>
<li>Usually provides information to enable the computer services department to bill the appropriate user department.</li>
<li>Defines how the job as a whole is to be run, e.g. its priority relative to other jobs in the queue.</li></ul>
<p>Procedures (commonly called <i>procs</i>) are pre-written JCL for steps or groups of steps, inserted into a job. Both JCLs allow such procedures. Procs are used for repeating steps which are used several times in one job, or in several different jobs. They save programmer time and reduce the risk of errors. To run a procedure one simply includes in the JCL file a single "card" which copies the procedure from a specified file, and inserts it into the jobstream. Also, procs can include <i>parameters</i> to customize the procedure for each use.
</p>
<div class="mw-heading mw-heading3"><h3 id="Basic_syntax">Basic syntax</h3></div>
<p>Both DOS and OS JCL have a maximum usable line length of 80 characters, because when DOS/360 and OS/360 were first used the main method of providing new input to a computer system was 80-column <a href="Punched_card" title="Punched card">punched cards</a>.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> It later became possible to submit jobs via disk or tape files with longer record lengths, but the operating system's job submission components ignored everything after character 80.
</p><p>Strictly speaking both operating system families use only 71 characters per line. Characters 73-80 are usually card sequence numbers which the system printed on the end-of-job report and are useful for identifying the locations of any errors reported by the operating system. Character 72 is usually left blank, but it can contain a nonblank character to indicate that the JCL statement is continued onto the next card.
</p><p>All commands, parameter names and values have to be in capitals, except for <a href="UNIX_System_Services" title="UNIX System Services">USS</a> filenames.
</p><p>All lines except for in-stream input (see below) have to begin with a slash "<code>/</code>", and all lines which the operating system processes have to begin with two slashes <code>//</code> - always starting in the <i>first column</i>. However, there are two exceptions: the delimiter statement and the comment statement. A delimiter statements begins with a slash and an asterisk (<code>/*</code>), and a comment statement in OS JCL begins with a pair of slashes and asterisk (<code>//*</code>) or an asterisk in DOS JCL.
</p><p>Many JCL statements are too long to fit within 71 characters, but can be extended on to an indefinite number of continuation cards by:
</p>
<table class="wikitable">
<tbody><tr>
<th>OS JCL</th>
<th>DOS JCL
</th></tr>
<tr>
<td>Ending all actual JCL cards except the last at a point where the syntax requires a comma (<code>,</code>)</td>
<td>Ending all actual JCL cards except the last at a point where the syntax requires a comma (<code>,</code>) and a non-blank character in column 72
</td></tr>
<tr>
<td>Starting each continuation card with <code>//</code> in column 1 and then at least 1 space</td>
<td>Starting each continuation card with spaces and continuing in column 15
</td></tr></tbody></table>
<p>The structure of the most common types of card is:<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">
<tbody><tr>
<th>OS JCL</th>
<th>DOS JCL
</th></tr>
<tr>
<td>
<ul><li><code>//</code></li>
<li>Name field for this statement, following <code>//</code> with no space between. If this statement does not have a name at least one blank immediately follows the <code>//</code>.</li>
<li>Space(s)</li>
<li>Statement type</li>
<li>Space(s)</li>
<li>Parameters, which vary depending on the statement type, separated by commas and with no space between them.</li></ul>
</td>
<td>
<ul><li><code>//</code> (spaces if this is a continuation of a previous line)</li>
<li>Statement type for this statement, following <code>//</code> with a space between.</li>
<li>Space(s)</li>
<li>Name of resource</li>
<li>Space(s)</li>
<li>Parameters, which vary depending on the statement type, separated by commas and with no space between them. Positional parameters, followed by keyword parameters.</li></ul>
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="In-stream_input">In-stream input</h3></div>
<p>DOS and OS JCL both allow in-stream input, i.e. "cards" which are to be processed by the application program rather than the operating system. Data which is to be kept for a long time will normally be stored on disk, but before the use of <a href="Interactive" class="mw-redirect" title="Interactive">interactive</a> terminals became common the only way to create and edit such disk files was by supplying the new data on cards.
</p><p>DOS and OS JCL have different ways of signaling the start of in-stream input, but both end in-stream input with <code>/*</code> at column 1 of the card following the last in-stream data card. This makes the operating system resume processing JCL in the card following the <code>/*</code> card.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>OS JCL: DD statements can be used to describe in-stream data, as well as data sets. A DD statement dealing with in-stream data has an asterisk (*) following the DD identifier, e.g. <code>//SYSIN DD *</code>. JCL statements can be included as part of in-stream data by using the DD DATA statements.</li></ul>
<dl><dd>An operand named <b>DLM</b> allowed specifying a delimiter (default is "/*"). Specifying an alternate delimiter allows JCL to be read as data, for example to copy procedures to a library member or to submit a job to the <i>internal reader</i>.
<ul><li>An example,<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> which submits a job to the <i>Internal Reader</i> (<b>INTRDR</b>) and then deletes two files is:</li></ul></dd></dl>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">SUBM</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">IEBGENER</span>
<span class="kp">//</span><span class="nv">SYSPRINT</span><span class="kr"> DD </span><span class="n">SYSOUT</span><span class="o">=</span><span class="n">Z</span>
<span class="kp">//</span><span class="nv">SYSUT2</span><span class="kr"> DD </span><span class="n">SYSOUT</span><span class="o">=</span><span class="p">(</span><span class="n">A</span><span class="p">,</span><span class="n">INTRDR</span><span class="p">)</span>
<span class="kp">//</span><span class="nv">SYSIN</span><span class="kr"> DD </span><span class="n">DUMMY</span>
<span class="kp">//</span><span class="nv">SYSUT1</span><span class="kr"> DD </span><span class="n">DATA</span><span class="p">,</span><span class="n">DLM</span><span class="o">=</span><span class="n">ZZ</span>
<span class="kp">//</span><span class="nl">RUNLATR</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="n">ACCT</span><span class="p">,</span><span class="n">MANIX</span><span class="p">,</span><span class="n">CLASS</span><span class="o">=</span><span class="n">A</span><span class="p">.</span><span class="n">TYPRUN</span><span class="o">=</span><span class="n">HOLD</span>
<span class="c1">//* ^ a JOB to run later</span>
<span class="hll"><span class="kp">//</span><span class="nl">CPUHOG</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PICALC1K</span>
</span><span class="kp">//</span><span class="nv">OUTPUT</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">PICALC</span><span class="mf">.1000</span><span class="n">DGTS</span><span class="p">,</span><span class="n">SPACE</span><span class="o">=</span><span class="p">(</span><span class="n">TRK</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">DISP</span><span class="o">=</span><span class="p">(,</span><span class="n">KEEP</span><span class="p">)</span>
<span class="x">ZZ</span>
<span class="c1">//* ^ as specified by DLM=ZZ</span>
<span class="hll"><span class="kp">//</span><span class="nl">DROPOLDR</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">IEFBR14</span>
</span><span class="hll"><span class="kp">//</span><span class="nv">DELETE4</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">PICALC</span><span class="mf">.4</span><span class="n">DGTS</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">OLD</span><span class="p">,</span><span class="n">DELETE</span><span class="p">)</span>
</span><span class="kp">//</span><span class="nv">DELETE5</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">PICALC</span><span class="mf">.5</span><span class="n">DGTS</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">OLD</span><span class="p">,</span><span class="n">DELETE</span><span class="p">)</span>
</pre></div>
<dl><dd><dl><dd><ol><li>The program called PICALC1K will await (TYPRUN=HOLD) being released manually</li>
<li>The program called <a href="IEFBR14" title="IEFBR14">IEFBR14</a> will run NOW and upon completion, the two existing files, PICALC.4DGTS and PICALC.5DGTS will be deleted.</li></ol></dd></dl></dd></dl>
<ul><li>DOS JCL: Simply enter the in-stream data after the EXEC card for the program.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Complexity">Complexity</h3></div>
<p><a href="Fred_Brooks" title="Fred Brooks">Fred Brooks</a>, who supervised the OS/360 project in which JCL was created, called it "the worst computer programming language ever devised by anybody, anywhere" in <a href="The_Design_of_Design" title="The Design of Design">The Design of Design</a>, where he used it as the example in the chapter "How Expert Designers Go Wrong".<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> He attributed this to the failure of the designers to realize that JCL is, in fact, a programming language.
</p><p>Much of the complexity of OS JCL, in particular, derives from the large number of options for specifying <a href="Data_set_(IBM_mainframe)" title="Data set (IBM mainframe)">dataset</a> information. While files on <a href="Unix" title="Unix">Unix</a>-like operating systems are abstracted into ordered streams of bytes, with the task of reading and writing structured data belonging exclusively with user-level programs (which, ultimately, ingest and emit such streams), and the practical details of data storage and access handled in large part by the operating system without the knowledge of user programs; datasets on OS/360 and its successors expose their file types and sizes, record types and lengths, block sizes, device-specific information like <a href="Magnetic_tape_data_storage" class="mw-redirect" title="Magnetic tape data storage">magnetic tape</a> density, and label information. Although there are system defaults for many options, there is still a lot to be specified by the programmer, through a combination of JCL and information coded in the program. The more information coded in the program, the less flexible it is, since information in the program overrides anything in the JCL; thus, most information is usually supplied through JCL.
</p><p>For example, to <a href="File_copying" title="File copying">copy a file</a> on <a href="Unix" title="Unix">Unix</a> operating system, the user would enter a command like:
</p>
<pre>cp oldFile newFile
</pre>
<p>The following example, using JCL, might be used to copy a file on OS/360:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">IS198CPY</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">(</span><span class="n">IS198T30500</span><span class="p">),</span><span class="s">'COPY JOB'</span><span class="p">,</span><span class="n">CLASS</span><span class="o">=</span><span class="n">L</span><span class="p">,</span><span class="n">MSGCLASS</span><span class="o">=</span><span class="n">X</span>
<span class="kp">//</span><span class="nl">COPY01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">IEBGENER</span>
<span class="hll"><span class="kp">//</span><span class="nv">SYSPRINT</span><span class="kr"> DD </span><span class="n">SYSOUT</span><span class="o">=</span><span class="nb">*</span>
</span><span class="kp">//</span><span class="nv">SYSUT1</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">OLDFILE</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="n">SHR</span>
<span class="kp">//</span><span class="nv">SYSUT2</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">NEWFILE</span><span class="p">,</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">NEW</span><span class="p">,</span><span class="n">CATLG</span><span class="p">,</span><span class="n">DELETE</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">SPACE</span><span class="o">=</span><span class="p">(</span><span class="n">CYL</span><span class="p">,(</span><span class="mi">40</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span><span class="n">RLSE</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DCB</span><span class="o">=</span><span class="p">(</span><span class="n">LRECL</span><span class="o">=</span><span class="mi">115</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=</span><span class="mi">1150</span><span class="p">)</span>
<span class="kp">//</span><span class="nv">SYSIN</span><span class="kr"> DD </span><span class="n">DUMMY</span>
</pre></div>
<p>A second explanation for the complexity of JCL is the different expectations for running a job from those found in a <a href="IBM_PC" class="mw-redirect" title="IBM PC">PC</a> or Unix-like environment.
</p>
<ul><li>Low-end System/360 CPUs were less powerful and more expensive than the mid-1980s PCs for which MS-DOS was designed. OS/360 was intended for systems with a minimum memory size of 32 KB and DOS/360 for systems with a minimum of 16 KB. A <a href="IBM_2030" class="mw-redirect" title="IBM 2030">360/30</a> CPU—low-end when System/360 was announced in 1964—processed 1.8K to 34.5K instructions per second.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> The first IBM PC in 1981 had 16 KB or 64 KB of memory and would process about 330K instructions per second.<sup id="cite_ref-vintageComputerIBMPC_17-0" class="reference"><a href="#cite_note-vintageComputerIBMPC-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-iathVirginiaEduPCs_18-0" class="reference"><a href="#cite_note-iathVirginiaEduPCs-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> As a result, JCL had to be easy for the <i>computer</i> to process, and ease of use by programmers was a much lower priority. In this era, programmers were much cheaper than computers.</li>
<li>JCL was designed for <a href="Batch_processing" title="Batch processing">batch processing</a>. As such, it has to tell the operating system everything, including what to do depending on the result of a step. For example, <code>DISP=(NEW,CATLG,DELETE)</code> means "if the program runs successfully, create a new file and catalog it; otherwise delete the new file." Programs run on a PC frequently depend on the user to clean up after processing problems.</li>
<li>System/360 machines were designed to be shared by all the users in an organization. So the <code>JOB</code> card tells the operating system how to bill the user's account (<code>IS198T30500</code>), what predefined amount of storage and other resources may be allocated (<code>CLASS=L</code>), and several other things. <code><span class="nowrap">//SYSPRINT DD SYSOUT=*</span></code> tells the computer to print the program's report on the default <a href="Printer_(computing)" title="Printer (computing)">printer</a> which is loaded with ordinary paper, not on some other printer which might be loaded with blank checks. <code>DISP=SHR</code> tells the operating system that other programs can read <code>OLDFILE </code><a href="Multiprogramming" class="mw-redirect" title="Multiprogramming">at the same time</a>.</li></ul>
<p>Later versions of the DOS/360 and OS/360 operating systems retain most features of the original JCL—although some simplification has been made, to avoid forcing customers to rewrite all their JCL files. Many users save as a <i>procedure</i> any set of JCL statements which is likely to be used more than once or twice.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p><p>The syntax of OS JCL is similar to the syntax of <a href="Macro_instruction" class="mw-redirect" title="Macro instruction">macros</a> in System/360 <a href="Assembly_language" title="Assembly language">assembly language</a>, and would therefore have been familiar to programmers at a time when many programs were coded in assembly language.
</p>
<div class="mw-heading mw-heading2"><h2 id="DOS_JCL">DOS JCL</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Positional_parameters">Positional parameters</h3></div>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">TLBL</span><span class="w"> </span><span class="c1">TAPEFIL,'COPYTAPE.JOB',,,,2</span>
<span class="kp">//</span><span class="nv">ASSGN</span><span class="w"> </span><span class="c1">SYS005,200</span>
<span class="kp">//</span><span class="nv">DLBL</span><span class="w"> </span><span class="c1">DISKFIL,'COPYTAPE.JOB',0,SD</span>
<span class="kp">//</span><span class="nv">EXTENT</span><span class="w"> </span><span class="c1">SYS005,VOL01,1,0,800,1600</span>
</pre></div>
<p>DOS JCL parameters are positional, which makes them harder to read and write, but easier for the system to parse.
</p>
<ul><li>The programmer must remember which item goes in which position in every type of statement.</li>
<li>If some optional parameters are omitted but later ones are included, the omitted parameters must be represented by commas with no spaces, as in the TLBL statement above.</li></ul>
<p>DOS JCL to some extent mitigates the difficulties of positional parameters by using more statements with fewer parameters than OS JCL. In the example the ASSGN, DLBL and EXTENT statements do the same work (specifying where a new disk file should be stored) as a single <code>DD</code> statement in OS JCL.
</p>
<div class="mw-heading mw-heading3"><h3 id="Device_dependence">Device dependence</h3></div>
<p>In the original DOS/360 and in most versions of DOS/VS one had to specify the model number of the device which was to be used for each disk or tape file—even for existing files and for temporary files which would be deleted at the end of the job. This meant that, if a customer upgraded to more modern equipment, many JCL files had to be changed.
</p><p>Later members of the DOS/360 family reduced the number of situations in which device model numbers were required.
</p>
<div class="mw-heading mw-heading3"><h3 id="Manual_file_allocation">Manual file allocation</h3></div>
<p>DOS/360 originally required the programmer to specify the location and size of all files on <a href="Direct-access_storage_device" title="Direct-access storage device">DASD</a>. The <code>EXTENT</code> card specifies the volume on which the extent resides, the starting absolute track, and the number of tracks. For z/VSE a file can have up to 256 extents on different volumes.
</p>
<div class="mw-heading mw-heading2"><h2 id="OS_JCL">OS JCL</h2></div>
<p>OS JCL consists of three basic statement types:<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><code>JOB</code> statement, which identifies the start of the job, and information about the whole job, such as billing, run priority, and time and space limits.</li>
<li><code>EXEC</code> statement, which identifies the program or <i>procedure</i><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> to be executed in this step of the job,<br> and information about the step, including <i>COND</i>itions for running or skipping a step.</li>
<li><code>DD</code> (Data Definition) statements, which identify a data file to be used in a step, and detailed info about that file. <code>DD</code> statements can be in any order within the step.</li></ul>
<p>Right from the start, JCL for the OS family (up to and including <a href="Z/OS" title="Z/OS">z/OS</a>) was more flexible and easier to use.
</p><p>The following examples use the old style of syntax which was provided right from the launch of <a href="System/360" class="mw-redirect" title="System/360">System/360</a> in 1964. The old syntax is still quite common in jobs that have been running for decades with only minor changes.
</p>
<div class="mw-heading mw-heading3"><h3 id="Rules_for_coding_JCL_statements">Rules for coding JCL statements</h3></div>
<p>Each JCL statement is divided into five fields:<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
</p>
<pre> Identifier-Field Name-Field Operation-Field Parameter-Field Comments-Field
^ ^ ^ ^
no space space space space
</pre>
<p><var>Identifier-Field</var> should be concatenated with <var>Name-Field</var>, i.e. there should be no spaces between them.
</p>
<ul><li><var>Identifier-Field</var> (<code>//</code>): The identifier field indicates to the system that a statement is a JCL statement rather than data. The identifier field consists of the following:
<ul><li>Columns 1 and 2 of all JCL statements, except the delimiter statement, contain <code>//</code></li>
<li>Columns 1 and 2 of the delimiter statement contain <code>/*</code></li>
<li>Columns 1, 2, and 3 of a JCL comment statement contain <code>//*</code></li></ul></li>
<li><var>Name-Field</var>: The name field identifies a particular statement so that other statements and the system can refer to it. For JCL statements, it should be coded as follows:
<ul><li>The name must begin in column 3.</li>
<li>The name is 1 through 8 alphanumeric or national (<code>$</code>, <code>#</code>, <code>@</code>) characters.</li>
<li>The first character must be an alphabetic.</li>
<li>The name must be followed by at least one blank.</li></ul></li>
<li><var>Operation-Field</var>: The operation field specifies the type of statement, or, for the command statement, the command. <var>Operation-Field</var> should be coded as follows:
<ul><li>The operation field consists of the characters in the syntax box for the statement.</li>
<li>The operation follows the name field.</li>
<li>The operation must be preceded and followed by at least one blank.</li>
<li>The operation will be one of <code>JOB</code>, <code>EXEC</code> and <code>DD</code>.</li></ul></li>
<li><var>Parameter-Field</var>: The parameter field, also sometimes referred to as the operand field, contains parameters separated by commas. Parameter field should be coded as follows:
<ul><li>The parameter field follows the operation field.</li>
<li>The parameter field must be preceded by at least one blank.</li>
<li>The parameter field contains parameters which are keywords that used in the statement to provide information such as the program or dataset name.</li></ul></li>
<li><var>Comments-Field</var>: This contains <a href="Comment_(computer_programming)" title="Comment (computer programming)">comments</a>. <var>Comments-Field</var> should be coded as Follows:
<ul><li>The comments field follows the parameter field.</li>
<li>The comments field must be preceded by at least one blank.</li></ul></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Keyword_parameters">Keyword parameters</h3></div>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">NEWFILE</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">MYFILE01</span><span class="p">,</span><span class="n">UNIT</span><span class="o">=</span><span class="n">DISK</span><span class="p">,</span><span class="n">SPACE</span><span class="o">=</span><span class="p">(</span><span class="n">TRK</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DCB</span><span class="o">=</span><span class="p">(</span><span class="n">LRECL</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=</span><span class="mi">1000</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">NEW</span><span class="p">,</span><span class="n">CATLG</span><span class="p">,</span><span class="n">DELETE</span><span class="p">)</span>
</pre></div>
<p>All of the major parameters of OS JCL statements are identified by keywords and can be presented in any order. A few of these contain two or more sub-parameters, such as <code>SPACE</code> (how much disk space to allocate to a new file) and <code>DCB</code> (detailed specification of a file's layout) in the example above. Sub-parameters are sometimes positional, as in <code>SPACE</code>, but the most complex parameters, such as <code>DCB</code>, have keyword sub-parameters.
</p><p>Positional parameter must precede keyword parameters. Keyword parameters always assign values to a keyword using the equals sign (<code>=</code>).<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Data_access_(DD_statement)">Data access (DD statement)</h3></div>
<p>The <code>DD</code> statement is used to reference data. This statement links a program's internal description of a dataset to the data on external devices: disks, tapes, cards, printers, etc. The DD may provide information such as a device type (e.g. '181','2400-5','TAPE'), a <a href="Volume_(computing)" title="Volume (computing)">volume serial</a> number for tapes or disks, and the description of the data file, called the <code>DCB</code> subparameter after the <a href="Data_Control_Block" title="Data Control Block">Data Control Block</a> (DCB) in the program used to identify the file.
</p><p>Information describing the file can come from three sources: The DD card information, the dataset label information for an existing file stored on tape or disk, and the DCB macro coded in the program. When the file is opened this data is merged, with the DD information taking precedence over the label information, and the DCB information taking precedence over both. The updated description is then written back to the dataset label. This can lead to unintended consequences if incorrect DCB information is provided.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>
</p><p>Because of the parameters listed above and specific information for various access methods and devices the DD statement is the most complex JCL statement. In one IBM reference manual description of the DD statement occupies over 130 pages—more than twice as much as the JOB and EXEC statements combined.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>
</p><p>The DD statement allows inline data to be injected into the job stream. This is useful for providing control information to utilities such as IDCAMS, SORT, etc. as well as providing input data to programs.
</p>
<div class="mw-heading mw-heading3"><h3 id="Device_independence">Device independence</h3></div>
<p>From the very beginning, the JCL for the OS family of operating systems offered a high degree of device independence. Even for new files which were to be kept after the end of the job one could specify the device type in generic terms, e.g., <code>UNIT=DISK</code>, <code>UNIT=TAPE</code>, or <code>UNIT=SYSSQ</code> (tape or disk). Of course, if it mattered one could specify a model number or even a specific device address.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Procedures">Procedures</h3></div>
<p><b>Procedures</b> permit grouping one or more "<i>EXEC PGM=</i>" and <i>DD</i> statements and then invoking them with "<i>EXEC PROC=</i>procname" -or- simply "EXEC procname" <sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>
</p><p>A facility called a Procedure Library allowed pre-storing procedures.
</p>
<div class="mw-heading mw-heading4"><h4 id="PROC_&_PEND">PROC & PEND</h4></div>
<p>Procedures can also be included in the job stream by terminating the procedure with a <code>// PEND</code> statement, then invoking it by name the same was as if it were in a procedure library.
</p><p>For example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="hll"><span class="kp">//</span><span class="nv">SUMPRINT</span><span class="kr"> PROC </span>
</span><span class="o">//</span><span class="n">PRINT</span><span class="w"> </span><span class="c1">EXEC PGM=IEBGENER</span>
<span class="kp">//</span><span class="nv">SYSUT1</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">CEO</span><span class="p">.</span><span class="n">FILES</span><span class="p">.</span><span class="n">DAYEND</span><span class="p">.</span><span class="n">RPT24A</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="n">SHR</span>
<span class="kp">//</span><span class="nv">SYSUT2</span><span class="kr"> DD </span><span class="n">SYSOUT</span><span class="o">=</span><span class="n">A</span>
<span class="kp">//</span><span class="nv">SYSIN</span><span class="kr"> DD </span><span class="n">DUMMY</span>
<span class="hll"><span class="kp">//</span><span class="w"> </span><span class="n">PEND</span>
</span><span class="kp">//</span><span class="w"> </span><span class="n">EXEC</span><span class="w"> </span><span class="c1">SUMPRINT</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Parameterized_procedures">Parameterized procedures</h3></div>
<p>OS JCL procedures were parameterized from the start, making them rather like <a href="Macro_assembler" class="mw-redirect" title="Macro assembler">macros</a> or even simple <a href="Subroutine" class="mw-redirect" title="Subroutine">subroutines</a> and thus increasing their <a href="Code_reuse" title="Code reuse">reusability</a> in a wide range of situations.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">MYPROC</span><span class="kr"> PROC </span><span class="n">FNAME</span><span class="o">=</span><span class="n">MYFILE01</span><span class="p">,</span><span class="n">SPTYPE</span><span class="o">=</span><span class="n">TRK</span><span class="p">,</span><span class="n">SPINIT</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span><span class="n">SPEXT</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span><span class="n">LR</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span><span class="n">BLK</span><span class="o">=</span><span class="mi">1000</span>
<span class="x">.....</span>
<span class="kp">//</span><span class="nv">NEWFILE</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=&</span><span class="n">FNAME</span><span class="p">,</span><span class="n">UNIT</span><span class="o">=</span><span class="n">DISK</span><span class="p">,</span><span class="n">SPACE</span><span class="o">=</span><span class="p">(</span><span class="o">&</span><span class="n">SPTYPE</span><span class="p">,</span><span class="o">&</span><span class="n">SPINIT</span><span class="p">,</span><span class="o">&</span><span class="n">SPEXT</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DCB</span><span class="o">=</span><span class="p">(</span><span class="n">LRECL</span><span class="o">=&</span><span class="n">LR</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=&</span><span class="n">BLK</span><span class="p">),</span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">NEW</span><span class="p">,</span><span class="n">CATLG</span><span class="p">,</span><span class="n">DELETE</span><span class="p">)</span>
<span class="x">....</span>
</pre></div>
<p>In this example, all the values beginning with ampersands "<code>&</code>" are parameters which will be specified when a job requests that the procedure be used. The PROC statement, in addition to giving the procedure a name, allows the programmer to specify default values for each parameter. So one could use the one procedure in this example to create new files of many different sizes and layouts. For example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">JOB01</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">..........</span>
<span class="kp">//</span><span class="nl">STEP01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">MYPROC</span><span class="w"> </span><span class="c1">FNAME=JOESFILE,SPTYPE=CYL,SPINIT=10,SPEXT=2,LR=100,BLK=2000</span>
<span class="x">or</span>
<span class="kp">//</span><span class="nl">JOB02</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">..........</span>
<span class="kp">//</span><span class="nl">STEP01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">MYPROC</span><span class="w"> </span><span class="c1">FNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=5000</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Referbacks">Referbacks</h3></div>
<p>In multi-step jobs, a later step can use a <i>referback</i> instead of specifying in full a file which has already been specified in an earlier step. For example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">MYPROC</span><span class="w"> </span><span class="c1">................</span>
<span class="kp">//</span><span class="nl">MYPR01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="p">..........</span>
<span class="kp">//</span><span class="nv">NEWFILE</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=&</span><span class="n">MYFILE</span><span class="p">,</span><span class="n">UNIT</span><span class="o">=</span><span class="n">DISK</span><span class="p">,</span><span class="n">SPACE</span><span class="o">=</span><span class="p">(</span><span class="n">TRK</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DCB</span><span class="o">=</span><span class="p">(</span><span class="n">LRECL</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=</span><span class="mi">1000</span><span class="p">),</span><span class="n">DISP</span><span class="o">=</span><span class="p">(</span><span class="n">NEW</span><span class="p">,</span><span class="n">CATLG</span><span class="p">,</span><span class="n">DELETE</span><span class="p">)</span>
<span class="x">....</span>
<span class="kp">//</span><span class="nl">MYPR02</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="p">..........</span>
<span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="nb">*</span><span class="p">.</span><span class="n">MYPR01</span><span class="p">.</span><span class="n">NEWFILE</span>
</pre></div>
<p>Here, <code>MYPR02</code> uses the file identified as <code>NEWFILE</code> in step <code>MYPR01</code> (<code>DSN</code> means "dataset name" and specifies the name of the file; a DSN could not exceed 44 characters<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>).
</p><p>In jobs which contain a mixture of job-specific JCL and procedure calls, a job-specific step can refer back to a file which was fully specified in a procedure, for example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">MYJOB</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">..........</span>
<span class="kp">//</span><span class="nl">STEP01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">MYPROC</span><span class="w"> </span><span class="c1">Using a procedure</span>
<span class="kp">//</span><span class="nl">STEP02</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="p">.........</span><span class="w"> </span><span class="c1">Step which is specific to this job</span>
<span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="nb">*</span><span class="p">.</span><span class="n">STEP01</span><span class="p">.</span><span class="n">MYPR01</span><span class="p">.</span><span class="n">NEWFILE</span>
</pre></div>
<p>where <code>DSN=*.STEP01.MYPR01.NEWFILE</code> means "use the file identified as <code>NEWFILE</code> in step <code>MYPR01</code> of the procedure used by step <code>STEP01</code> of this job". Using the name of the step which called the procedure rather than the name of the procedure allows a programmer to use the same procedure several times in the same job without confusion about which instance of the procedure is used in the referback.
</p>
<div class="mw-heading mw-heading3"><h3 id="Comments">Comments</h3></div>
<p>JCL files can be long and complex, and the language is not easy to read. OS JCL allows programmers to include two types of explanatory comment:
</p>
<ul><li>On the same line as a JCL statement. They can be extended by placing a continuation character (conventionally "<code>X</code>") in column 72, followed by "<code>// </code>" in columns 1–3 of the next line.</li>
<li>Lines which contain only comment, often used to explain major points about the overall structure of the JCL rather than local details. Comment-only lines are also used to divide long, complex JCL files into sections.</li></ul>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">MYJOB</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">..........</span>
<span class="c1">//* Lines containing only comments.</span>
<span class="c1">//******** Often used to divide JCL listing into sections ********</span>
<span class="kp">//</span><span class="nl">STEP01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">MYPROC</span><span class="w"> </span><span class="c1">Comment 2 on same line as statement</span>
<span class="kp">//</span><span class="nl">STEP02</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="p">.........</span><span class="w"> </span><span class="c1">Comment 3 has been extended and X</span>
<span class="kp">//</span><span class="w"> </span><span class="n">overflows</span><span class="w"> </span><span class="c1">into another line.</span>
<span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">STEP01</span><span class="p">.</span><span class="n">MYPR01</span><span class="p">.</span><span class="n">NEWFILE</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Concatenating_input_files">Concatenating input files</h3></div>
<p>OS JCL allows programmers to concatenate ("chain") input files so that they appear to the program as <i>one</i> file, for example
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">MYFILE01</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="n">SHR</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=JOESFILE,DISP=SHR</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=SUESFILE,DISP=SHR</span>
</pre></div>
<p>The 2nd and third statements have no value in the name field, so OS treats them as concatenations. The files must be of the same basic type (almost always sequential), and must have the same record length, however the block length need not be the same.
</p><p>In early versions of the OS (certainly before OS/360 R21.8) the block length must be in decreasing order, or the user must inspect each instance and append to the named DD statement the maximum block length found, as in, for example,
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">MYFILE01</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="n">SHR</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=</span><span class="mi">800</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=JOESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 800)</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=SUESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 800)</span>
</pre></div>
<p>In later versions of the OS (certainly after OS/MVS R3.7 with the appropriate "selectable units") the OS itself, during allocation, would inspect each instance in a concatenation and would substitute the maximum block length which was found.
</p><p>A usual fallback was to simply determine the maximum possible block length on the device, and specify that on the named DD statement, as in, for example,
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nv">INPUT01</span><span class="kr"> DD </span><span class="n">DSN</span><span class="o">=</span><span class="n">MYFILE01</span><span class="p">,</span><span class="n">DISP</span><span class="o">=</span><span class="n">SHR</span><span class="p">,</span><span class="n">BLKSIZE</span><span class="o">=</span><span class="mi">8000</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=JOESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 8000)</span>
<span class="kp">//</span><span class="w"> </span><span class="n">DD</span><span class="w"> </span><span class="c1">DSN=SUESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 8000)</span>
</pre></div>
<p>The purpose of this fallback was to ensure that the access method would allocate an input buffer set which was large enough to accommodate any and all of the specified datasets.
</p>
<div class="mw-heading mw-heading3"><h3 id="Conditional_processing">Conditional processing</h3></div>
<p>OS expects programs to set a return code which specifies how successful the <i>program</i> thought it was. The most common conventional values are:<sup id="cite_ref-Brown_30-0" class="reference"><a href="#cite_note-Brown-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: p.87">: p.87 </span></sup>
</p>
<ul><li>0 = Normal - all OK</li>
<li>4 = Warning - minor errors or problems</li>
<li>8 = Error - significant errors or problems</li>
<li>12 = Severe error - major errors or problems, the results (e.g. files or reports produced) should not be trusted.</li>
<li>16 = Terminal error - very serious problems, do not use the results!</li></ul>
<p>OS JCL refers to the return code as <code>COND</code> ("condition code"), and can use it to decide whether to run subsequent steps. However, unlike most modern programming languages, conditional steps in OS JCL are <i>not</i> executed if the specified condition is true—thus giving rise to the <a href="Mnemonic" title="Mnemonic">mnemonic</a>, "If it's true, pass on through [without running the code]." To complicate matters further, the condition can only be specified <i>after</i> the step to which it refers. For example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="kp">//</span><span class="nl">MYJOB</span><span class="w"> </span><span class="kr">JOB</span><span class="w"> </span><span class="p">...........</span>
<span class="kp">//</span><span class="nl">STEP01</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PROG01</span>
<span class="x">....</span>
<span class="kp">//</span><span class="nl">STEP02</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PROG02</span><span class="p">,</span><span class="n">COND</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="n">GT</span><span class="p">,</span><span class="n">STEP01</span><span class="p">)</span>
<span class="x">....</span>
<span class="kp">//</span><span class="nl">STEP03</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PROG03</span><span class="p">,</span><span class="n">COND</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="n">LE</span><span class="p">)</span>
<span class="x">....</span>
<span class="kp">//</span><span class="nl">STEP04</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PROG04</span><span class="p">,</span><span class="n">COND</span><span class="o">=</span><span class="p">(</span><span class="n">ONLY</span><span class="p">,</span><span class="n">STEP01</span><span class="p">)</span>
<span class="x">....</span>
<span class="kp">//</span><span class="nl">STEP05</span><span class="w"> </span><span class="kr">EXEC</span><span class="w"> </span><span class="n">PGM</span><span class="o">=</span><span class="n">PROG05</span><span class="p">,</span><span class="n">COND</span><span class="o">=</span><span class="p">(</span><span class="n">EVEN</span><span class="p">,</span><span class="n">STEP03</span><span class="p">)</span>
<span class="x">....</span>
</pre></div>
<p>means:
</p>
<ol><li>Run <code>STEP01</code>, and collect its return code.</li>
<li>Don't run <code>STEP02</code> if the number 4 is greater than <code>STEP01</code>'s return code.</li>
<li>Don't run <code>STEP03</code> if the number 8 is less than or equal to any previous return code.</li>
<li>Run <code>STEP04</code> only if <code>STEP01</code> abnormally ended.</li>
<li>Run <code>STEP05</code>, even if <code>STEP03</code> abnormally ended.</li></ol>
<p>This translates to the following <a href="Pseudocode" title="Pseudocode">pseudocode</a>:
</p>
<pre>run STEP01
<b>if</b> STEP01's return code <b>is greater than or equal to </b> 4 <b>then</b>
run STEP02
<b>end if</b>
<b>if</b> any previous return code <b>is less than </b> 8 <b>then</b>
run STEP03
<b>end if</b>
<b>if</b> STEP01 abnormally ended <b>then</b>
run STEP04
<b>end if</b>
<b>if</b> STEP03 abnormally ended <b>then</b>
run STEP05
<b>else</b>
run STEP05
<b>end if</b>
</pre>
<p>Note that by reading the steps containing <code>COND</code> statements backwards, one can understand them fairly easily. This is an example of <a href="Transposition_(logic)" class="mw-redirect" title="Transposition (logic)">logical transposition</a>.
However, IBM later introduced IF condition in JCL thereby making coding somewhat easier for programmers while retaining the <code>COND</code> parameter (to avoid making changes to the existing JCLs where <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">COND parm</code> is used).
</p><p>The <code>COND</code> parameter may also be specified on the <code>JOB</code> statement. If so the system "performs the same return code tests for every step in a job. If a JOB statement return code test is satisfied, the job terminates."<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Utilities">Utilities</h3></div>
<p>Jobs use a number of <a href="IBM_mainframe_utility_programs" class="mw-redirect" title="IBM mainframe utility programs">IBM utility programs</a> to assist in the processing of data. Utilities are most useful in batch processing. The utilities can be grouped into three sets:
</p>
<ul><li>Data Set Utilities - Create, print, copy, move and delete data sets.</li>
<li>System Utilities - Maintain and manage catalogs and other system information.</li>
<li>Access Method Services - Process <a href="Virtual_Storage_Access_Method" title="Virtual Storage Access Method">Virtual Storage Access Method</a> (VSAM) and non-VSAM data sets.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Difficulty_of_use">Difficulty of use</h3></div>
<p>OS JCL is undeniably complex<sup id="cite_ref-asm-jcl_32-0" class="reference"><a href="#cite_note-asm-jcl-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> and has been described as "user hostile".<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> As one instructional book on JCL asked, "Why do even sophisticated programmers hesitate when it comes to Job Control Language?"<sup id="cite_ref-jcl-self_35-0" class="reference"><a href="#cite_note-jcl-self-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> The book stated that many programmers either copied control cards without really understanding what they did, or "believed the prevalent rumors that JCL was horrible, and only 'die-hard' computer-types ever understood it" and handed the task of figuring out the JCL statements to someone else.<sup id="cite_ref-jcl-self_35-1" class="reference"><a href="#cite_note-jcl-self-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> Such an attitude could be found in programming language textbooks, which preferred to focus on the language itself and not how programs in it were run. As one <a href="Fortran_IV" class="mw-redirect" title="Fortran IV">Fortran IV</a> textbook said when listing possible error messages from the <a href="WATFOR" class="mw-redirect" title="WATFOR">WATFOR</a> compiler: "Have you been so foolish as to try to write your own 'DD' system control cards? Cease and desist forthwith; run, do not walk, for help."<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>
</p><p>Nevertheless, some books that went into JCL in detail emphasized that once it was learned to an at least somewhat proficient degree, one gained freedom from installation-wide defaults and much better control over how an IBM system processed your workload.<sup id="cite_ref-jcl-self_35-2" class="reference"><a href="#cite_note-jcl-self-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-asm-jcl_32-1" class="reference"><a href="#cite_note-asm-jcl-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> Another book commented on the complexity but said, "take heart. The JCL capability you will gain from [the preceding chapter] is all that most programmers will ever need."<sup id="cite_ref-asm-jcl_32-2" class="reference"><a href="#cite_note-asm-jcl-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Job_Entry_Control_Language">Job Entry Control Language</h2></div>
<p>On IBM mainframe systems <i>Job Entry Control Language</i> or <i>JECL</i> is the set of <a href="Command_language" title="Command language">command language</a> control statements that provide information for the <a href="Spooling" title="Spooling">spooling</a> subsystem – <a href="Job_Entry_Subsystem_2/3" title="Job Entry Subsystem 2/3">JES2 or JES3</a> on <a href="Z/OS" title="Z/OS">z/OS</a> or <a href="IBM_POWER_(software)" title="IBM POWER (software)">VSE/POWER</a> for <a href="VSE_(operating_system)" title="VSE (operating system)">z/VSE</a>. JECL statements may "specify on which network computer to run the <a href="Job_stream" title="Job stream">job</a>, when to run the job, and where to send the resulting output."<sup id="cite_ref-Brown_30-1" class="reference"><a href="#cite_note-Brown-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>
</p><p>JECL is distinct from <a href="Job_control_language" class="mw-redirect" title="Job control language">job control language</a> (JCL), which instructs the <a href="Operating_system" title="Operating system">operating system</a> <i>how</i> to run the job.
</p><p>There are different versions of JECL for the three environments.
</p>
<div class="mw-heading mw-heading3"><h3 id="OS/360">OS/360</h3></div>
<p>An early version of Job Entry Control Language for OS/360 Remote Job Entry (Program Number 360S-RC-536) used the identifier <code>..</code> in columns 1–2 of the input record and consisted of a single control statement: <code>JED</code> (Job Entry Definition). "Workstation Commands" such as <code>LOGON</code>, <code>LOGOFF</code>, and <code>STATUS</code> also began with <code>..</code> .<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="pre-JES_JECL">pre-JES JECL</h4></div>
<p>Although the term had not yet been developed, <a href="Houston_Automatic_Spooling_Priority" title="Houston Automatic Spooling Priority">HASP</a> did have similar functionality to what would become the JECL of <a href="Job_Entry_Subsystem_2/3" title="Job Entry Subsystem 2/3">JES</a>, including <code>/*</code> syntax.
</p>
<div class="mw-heading mw-heading3"><h3 id="z/OS">z/OS</h3></div>
<p>For JES2 JECL statements start with <code>/*</code>, for JES3 they start with <code>//*</code>, except for remote <code>/*SIGNON</code> and <code>/*SIGNOFF</code> commands. The commands for the two systems are completely different.
</p>
<div class="mw-heading mw-heading4"><h4 id="JES2_JECL">JES2 JECL</h4></div>
<p>The following JES2 JECL statements are used in z/OS 1.2.0.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">
<tbody><tr>
<th>JECL statement</th>
<th>Function</th>
<th>Example
</th></tr>
<tr>
<td><code>/*$<i>command</i></code></td>
<td>Enters an operator (console) command</td>
<td><code>/*$S PRINTER3</code><sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td><code>/*JOBPARM</code></td>
<td>Specifies values for job-related parameters</td>
<td><code>/*JOBPARM TIME=10</code>
</td></tr>
<tr>
<td><code>/*MESSAGE</code></td>
<td>Sends a message to the operator console</td>
<td><code>/*MESSAGE CALL JOE AT HOME IF JOB ABENDS</code>
</td></tr>
<tr>
<td><code>/*NETACCT</code></td>
<td>Specifies account number for network job</td>
<td><code>/*NETACCT 12345</code>
</td></tr>
<tr>
<td><code>/*NOTIFY</code></td>
<td>Specifies destination for notification messages</td>
<td><code>/*NOTIFY SAM</code>
</td></tr>
<tr>
<td><code>/*OUTPUT</code></td>
<td>Specifies <i>SYSOUT</i> dataset options</td>
<td><code>/*OUTPUT FORMS=BILL</code>
</td></tr>
<tr>
<td><code>/*PRIORITY</code></td>
<td>Sets job selection priority</td>
<td><code>/*PRIORITY 15</code>
</td></tr>
<tr>
<td><code>/*ROUTE</code></td>
<td>Specifies output destination or execution node</td>
<td><code>/*ROUTE PRT RMT5</code>
</td></tr>
<tr>
<td><code>/*SETUP</code></td>
<td>Requests volume mounting or other offline operation</td>
<td><code>/*SETUP TAPE01,TAPE02</code>
</td></tr>
<tr>
<td><code>/*SIGNOFF</code></td>
<td>Ends remote session</td>
<td><code>/*SIGNOFF</code>
</td></tr>
<tr>
<td><code>/*SIGNON</code></td>
<td>Begins remote session</td>
<td><code>/*SIGNON REMOTE5 <i>password</i></code>
</td></tr>
<tr>
<td><code>/*XEQ</code></td>
<td>Specifies execution node</td>
<td><code>/*XEQ DENVER</code>
</td></tr>
<tr>
<td><code>/*XMIT</code></td>
<td>Indicates job or dataset to be transmitted to another network node</td>
<td><code>/*XMIT NYC</code>
</td></tr></tbody></table>
<div class="mw-heading mw-heading4"><h4 id="JES3_JECL">JES3 JECL</h4></div>
<p>The following JES3 JECL statements are used in z/OS 1.2.0<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">
<tbody><tr>
<th>JECL statement</th>
<th>Function</th>
<th>Example
</th></tr>
<tr>
<td><code>//**<i>command</i></code></td>
<td>Enters a JES3 operator (console) command</td>
<td>
</td></tr>
<tr>
<td><code>//*DATASET</code></td>
<td>Marks the beginning of an in-stream dataset</td>
<td>
</td></tr>
<tr>
<td><code>//*ENDDATASET</code></td>
<td>Marks the end of an in-stream dataset</td>
<td>
</td></tr>
<tr>
<td><code>//*ENDPROCESS</code></td>
<td>Marks the end of a series of <code>//*PROCESS</code> statements</td>
<td>
</td></tr>
<tr>
<td><code>//*FORMAT</code></td>
<td>Specifies <code>SYSOUT</code> dataset options</td>
<td>
</td></tr>
<tr>
<td><code>//*MAIN</code></td>
<td>Specifies values for job-related parameters</td>
<td>
</td></tr>
<tr>
<td><code>//*NET</code></td>
<td>Identifies relationships among jobs using JES3 <i>dependent job control</i></td>
<td>
</td></tr>
<tr>
<td><code>//*NETACCT</code></td>
<td>Specifies account number for network job</td>
<td>
</td></tr>
<tr>
<td><code>//*OPERATOR</code></td>
<td>Sends a message to the operator console</td>
<td>
</td></tr>
<tr>
<td><code>//*PAUSE</code></td>
<td>Stops the input reader</td>
<td>
</td></tr>
<tr>
<td><code>//*PROCESS</code></td>
<td>Identifies a non-standard job</td>
<td>
</td></tr>
<tr>
<td><code>//*ROUTE</code></td>
<td>Specifies the execution node for the job</td>
<td>
</td></tr>
<tr>
<td><code>/*SIGNOFF</code></td>
<td>Ends remote session</td>
<td><code>/*SIGNOFF</code>
</td></tr>
<tr>
<td><code>/*SIGNON</code></td>
<td>Begins remote session</td>
<td>
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="z/VSE">z/VSE</h3></div>
<p>For VSE JECL statements start with '<code>* $$</code>' (note the <i>single</i> space). The Job Entry Control Language defines the start and end lines of JCL jobs. It advises <a href="VSE_(operating_system)" title="VSE (operating system)">VSE</a>/<a href="IBM_POWER_(software)" title="IBM POWER (software)">POWER</a> how this job is handled. JECL statements define the job name (used by VSE/POWER), the class in which the job is processed, and the disposition of the job (i.e. <code>D</code>, <code>L</code>, <code>K</code>, <code>H</code>).
</p>
<table class="wikitable">
<tbody><tr>
<th>JECL statement<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup></th>
<th>Function</th>
<th>Example
</th></tr>
<tr>
<td><code>* $$ CTL</code></td>
<td>Establishes a default <i>input class</i></td>
<td><code>* $$ CTL CLASS=A</code>
</td></tr>
<tr>
<td><code>* $$ JOB</code></td>
<td>Specifies attributes of a job</td>
<td><code>* $$ JOB JNM=PYRL,PRI=9</code>
</td></tr>
<tr>
<td><code>* $$ EOJ</code></td>
<td>Marks the end of a job</td>
<td><code>* $$ EOJ</code>
</td></tr>
<tr>
<td><code>* $$ RDR</code></td>
<td>Inserts a file from a 3540 diskette into the input stream</td>
<td><code>* $$ RDR SYS005,'fname',2</code>
</td></tr>
<tr>
<td><code>* $$ PRT</code></td>
<td>Specifies characteristics of spooled print files<br> "LST' is a synonym for "PRT"</td>
<td><code>* $$ PRT FNO=STD,COPY=2</code>
</td></tr>
<tr>
<td><code>* $$ PUN</code></td>
<td>Specifies characteristics of spooled punch files</td>
<td><code>* $$ PUN DISP=T,TADDR=280</code>
</td></tr>
<tr>
<td><code>* $$ SLI</code></td>
<td>Inserts data ("book") from source statement library into the input stream</td>
<td><code>* $$ SLI A.JCL1</code>
</td></tr>
<tr>
<td><code>* $$ DATA</code></td>
<td>Inserts data from the card reader into a book retrieved from the source statement library</td>
<td><code>* $$ DATA INPUT1</code>
</td></tr></tbody></table>
<p>Example:
</p>
<div class="mw-highlight mw-highlight-lang-jcl mw-content-ltr" dir="ltr"><pre><span class="x">* $$ JOB JNM=NAME,DISP=K,CLASS=2</span>
<span class="x">[some JCL statements here]</span>
<span class="x">* $$ EOJ</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Other_systems">Other systems</h2></div>
<div role="note" class="hatnote navigation-not-searchable">For Other (non-IBM) Job Control Languages, see <a href="Job_control_(computing)" title="Job control (computing)">Job control (computing)</a>.</div>
<p>Other mainframe <a href="Batch_processing" title="Batch processing">batch</a> systems had some form of job control language, whether called that<sup id="cite_ref-stallings_4-1" class="reference"><a href="#cite_note-stallings-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> or not; their syntax was completely different from IBM versions, but they usually provided similar capabilities. Such a language would have control cards with a special indicator, such as an initial dollar sign with <code>$JOB</code> being the first such card, interspersed with cards containing program code, data to be run, and so on.<sup id="cite_ref-stallings_4-2" class="reference"><a href="#cite_note-stallings-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Interactive_computing" title="Interactive computing">Interactive</a> systems
include "<a href="Command_language" title="Command language">command languages</a>"—command files (such as PCDOS ".bat" files) can be run non-interactively, but these usually do not provide as robust an environment for running unattended jobs as JCL. On some computer systems the job control language and the interactive command language may be different. For example, <a href="Time_Sharing_Option" title="Time Sharing Option">TSO</a> on z/OS systems uses <a href="CLIST" title="CLIST">CLIST</a> or <a href="Rexx" title="Rexx">Rexx</a> as command languages along with JCL for batch work. On other systems these may be the same.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Dd_(Unix)" title="Dd (Unix)">dd (Unix)</a>, Unix program inspired by <code>DD</code></li>
<li><a href="IBM_mainframe_utility_programs" class="mw-redirect" title="IBM mainframe utility programs">IBM mainframe utility programs</a></li>
<li><a href="Batch_processing" title="Batch processing">Batch processing</a></li>
<li><a href="Data_set_(IBM_mainframe)#Generation_Data_Group" title="Data set (IBM mainframe)">Data set (IBM mainframe)#Generation Data Group</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text">"Every job submitted for execution ... must include JCL statements" – ibm.com</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text">and many more aspects such as whether the file is to be retained or deleted, the maximum disk space to which it can grow, the name of a tape to be pre-mounted, and indicate under what conditions to skip a step.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, p. 1.</span>
</li>
<li id="cite_note-stallings-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-stallings_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-stallings_4-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-stallings_4-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFStallings1996" class="citation book cs1">Stallings, William (1996). <i>Computer Organization and Architecture: Designing for Performance</i> (Fourth ed.). Upper Saddle River, New Jersey: Prentice-Hall. p. 228. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-359985-X</bdi>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, p. 5.</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 385–386.</span>
</li>
<li id="cite_note-mcq-pds-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-mcq-pds_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-mcq-pds_7-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 288–289, 400.</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFLewis2011" class="citation web cs1">Lewis, Cecilia (August 8, 2011). <a rel="nofollow" class="external text" href="https://share.confex.com/share/117/webprogram/Handout/Session9939/SHARE%209939%20PDSE%20v1.pdf">"What We've Done for You Lately With PDSE"</a> <span class="cs1-format">(PDF)</span>. <i>SHARE in Orlando</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-03-03</span></span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 22–24.</span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 380–382.</span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text">Stern and Stern, <i>Structured COBOL Programming</i>, pp. 528–529.</span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text">Stern and Stern, <i>Structured COBOL Programming</i>, pp. 529, 531.</span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text">Stern and Stern, <i>Structured COBOL Programming</i>, pp. 529, 537.</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text">modeled on <a rel="nofollow" class="external free" href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.hasc300/has2z1_Submitting_to_the_internal_reader_from_jobs_or_tasks.htm">https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.hasc300/has2z1_Submitting_to_the_internal_reader_from_jobs_or_tasks.htm</a>, using knowledge dating back to when Green Cards came from IBM, and Manix worked for a company owning an IBM card sorter</span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrooks2010" class="citation book cs1">Brooks, Frederick P. (2010). <i>The Design Of Design</i>. <a href="Addison-Wesley" title="Addison-Wesley">Addison-Wesley</a>. pp. <span class="nowrap">167–</span>173. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-36298-5</bdi>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20041217213638/http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP2030.html">"IBM Archives: System/360 Model 30"</a>. <i>www-03.ibm.com</i>. 2003-01-23. Archived from <a rel="nofollow" class="external text" href="http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP2030.html">the original</a> on December 17, 2004<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-25</span></span>.</cite></span>
</li>
<li id="cite_note-vintageComputerIBMPC-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-vintageComputerIBMPC_17-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20060705211337/http://www.vintage-computer.com/ibm_pc.shtml">"IBM PC"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.vintage-computer.com/ibm_pc.shtml">the original</a> on 2006-07-05<span class="reference-accessdate">. Retrieved <span class="nowrap">2007-10-21</span></span>.</cite></span>
</li>
<li id="cite_note-iathVirginiaEduPCs-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-iathVirginiaEduPCs_18-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www3.iath.virginia.edu/elab/hfl0108.html">IBM-compatible computers</a> History of PCs <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070814010809/http://www3.iath.virginia.edu/elab/hfl0108.html">Archived</a> August 14, 2007, at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrown2002" class="citation book cs1">Brown, Gary DeWard (2002). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=K8kMJa8arlIC&pg=PA248"><i>zOS JCL</i></a> (fifth ed.). John Wiley & Sons. p. 248. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0471-236357</bdi>.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, pp. 8, 23. There are also two additional statements, PROC and PEND, used to test JCL procedures.</span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text">A pre-stored set of "EXEC PGM=" and "DD" JCL commands which could be parameterized</span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, pp. 12–16.</span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, pp. 13–15.</span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite id="DataMgmt" class="citation book cs1">IBM Corporation (August 1978). <a rel="nofollow" class="external text" href="http://www.prycroft6.com.au/misc/download/GC26-3875-0_MVS_DataMgmtSrvcsGde_Aug78OCR.pdf"><i>OS/VS MVS Data Management Services Guide</i></a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">Oct 17,</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation1971" class="citation book cs1">IBM Corporation (June 1971). <a rel="nofollow" class="external text" href="http://www.bitsavers.org/pdf/ibm/360/os/R20.1_Mar71/GC28-6704-1_OS_JCL_Reference_Rel_20.1_Jun71.pdf"><i>IBM System/360 Operating System: Job Control Language Reference</i></a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">June 25,</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 297, 406–407.</span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text">the default for the EXEC statement is PROC=</span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, pp. 129–131.</span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.idad400/name.htm">"Data set names"</a>. <i><a href="IBM" title="IBM">IBM</a></i>. 27 March 2014. <q>Data set names must not exceed 44 characters, including all name segments and periods.</q></cite></span>
</li>
<li id="cite_note-Brown-30"><span class="mw-cite-backlink">^ <a href="#cite_ref-Brown_30-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Brown_30-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBrown2002" class="citation book cs1">Brown, Gary DeWard (2002). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=K8kMJa8arlIC&dq=jecl+definition&pg=PA3"><i>zOS JCL</i></a>. John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780471426738</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-05-05</span></span>.</cite></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation" class="citation web cs1">IBM Corporation. <a rel="nofollow" class="external text" href="https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.ieab500/iea3b5_Relationship_of_the_COND_parameters_on_JOB_and_EXEC_statements.htm">"Relationship of the COND parameters on JOB and EXEC statements"</a>. <i>IBM Knowledge Center</i><span class="reference-accessdate">. Retrieved <span class="nowrap">Feb 21,</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-asm-jcl-32"><span class="mw-cite-backlink">^ <a href="#cite_ref-asm-jcl_32-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-asm-jcl_32-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-asm-jcl_32-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text">McQuillen, <i>System/360–370 Assembler Language</i>, pp. 406–407.</span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFCharley1993" class="citation book cs1">Charley, Alfred (1993). <i>NetView: IBM's Network Management Product</i>. New York: Van Nostrand Reinhold. p. <a rel="nofollow" class="external text" href="https://books.google.com/books?id=TPVSAAAAMAAJ&q=jcl+%22user+hostile%22">93</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-442-01407-4</bdi>.</cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite id="CITEREFMathew_W._Blode2020" class="citation web cs1">Mathew W. Blode (April 6, 2020). <a rel="nofollow" class="external text" href="https://hn.matthewblode.com/item/22785474">"Newly unemployed New Yorkers are being frustrated by 1970s-era technology(nytimes.com)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">May 7,</span> 2020</span>. <q>JCL in particular is notoriously user hostile and has been called "the worst programming language ever designed" by Fred Brooks ... (http://dtsc.dfw.ibm.com/MVSDS/'HTTPD2.APPS.ZOSCLASS.PDF(ZCLA...)[link in original].</q></cite></span>
</li>
<li id="cite_note-jcl-self-35"><span class="mw-cite-backlink">^ <a href="#cite_ref-jcl-self_35-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-jcl-self_35-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-jcl-self_35-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text">Ashley and Fernandez, <i>Job Control Language</i>, pp. vii–viii, back cover.</span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite id="CITEREFBlatt1971" class="citation book cs1">Blatt, John M. (1971). <i>Introduction to FORTRAN IV Programming: Using the WATFOR/WATFIV Compilers</i>. Pacific Palisades, California: Goodyear Publishing Company. p. 276. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-87620-440-X</bdi>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation1968" class="citation book cs1">IBM Corporation (1968). <a rel="nofollow" class="external text" href="http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/rje/C30-2006-1_Remote_Job_Entry_May68.pdf"><i>IBM System/360 Operating System Remote Job Entry</i></a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-05-05</span></span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation" class="citation web cs1">IBM Corporation. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20151018201305/http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/iea2b510/1.1.2?SHELF=EZ2ZO103&DT=20010626133938&CASE=">"Job Entry Subsystem 2 (JES2) Control Statements"</a>. <i>z/OS V1R2.0 MVS JCL</i>. Archived from <a rel="nofollow" class="external text" href="http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/iea2b510/1.1.2?SHELF=EZ2ZO103&DT=20010626133938&CASE=">the original</a> on October 18, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">February 25,</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text">other examples can be viewed at <a href="Houston_Automatic_Spooling_Priority#Operator_Commands" title="Houston Automatic Spooling Priority">Houston Automatic Spooling Priority#Operator Commands</a></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation" class="citation web cs1">IBM Corporation. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20151018201305/http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/iea2b510/1.1.2?SHELF=EZ2ZO103&DT=20010626133938&CASE=">"Job Entry Subsystem 3 (JES3) Control Statements"</a>. <i>z/OS V1R2.0 MVS JCL</i>. Archived from <a rel="nofollow" class="external text" href="http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/iea2b510/1.1.2?SHELF=EZ2ZO103&DT=20010626133938&CASE=">the original</a> on October 18, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">February 25,</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite id="CITEREFIBM_Corporation1974" class="citation book cs1">IBM Corporation (1974). <a rel="nofollow" class="external text" href="http://bitsavers.trailing-edge.com/pdf/ibm/370/DOS_VS/GC33-5403-1_DOS_VS_POWER_VS_Installation_and_Operation_Sep74.pdf"><i>DOS/VS POWER/VS Installation and Operations</i></a> <span class="cs1-format">(PDF)</span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Sources">Sources</h2></div>
<ul><li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130819061018/http://publibz.boulder.ibm.com/epubs/pdf/iea2b540.pdf">"z/OS V1R6.0 MVS JCL User's Guide"</a> <span class="cs1-format">(PDF)</span> (5th ed.). IBM. September 2004. Archived from <a rel="nofollow" class="external text" href="http://publibz.boulder.ibm.com/epubs/pdf/iea2b540.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2013-08-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2006-10-12</span></span>.</cite></li>
<li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130819060714/http://publibz.boulder.ibm.com/epubs/pdf/iea2b661.pdf">"z/OS V1R7.0 MVS JCL Reference"</a> <span class="cs1-format">(PDF)</span> (11th ed.). IBM. April 2006. Archived from <a rel="nofollow" class="external text" href="http://publibz.boulder.ibm.com/epubs/pdf/iea2b661.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2013-08-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2006-10-12</span></span>.</cite></li>
<li><cite id="CITEREFJohnston2005" class="citation web cs1">Johnston, Jerry (1 April 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090304014628/http://www.zjournal.com/index.cfm?section=article&aid=293">"VSE: A Look at the Past 40 Years"</a>. <i>z/Journal</i>. Thomas Communications. Archived from <a rel="nofollow" class="external text" href="http://www.zjournal.com/index.cfm?section=article&aid=293">the original</a> on 4 March 2009.</cite></li>
<li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090621080529/http://library.thinkquest.org/22522/timeline3_en.html">"Computer Chronicles: 1972 - 1981"</a>. <i>ThinkQuest</i>. <a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a>. 1998. Archived from <a rel="nofollow" class="external text" href="http://library.thinkquest.org/22522/timeline3b_en.html">the original</a> on 21 June 2009.</cite></li>
<li><cite id="CITEREFDeWard_Brown2002" class="citation book cs1">DeWard Brown, Gary (7 June 2002). <i>zOS JCL</i> (5th ed.). Wiley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-471-23635-1</bdi>.</cite></li>
<li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.ieab600/iea2b69009.htm">"JCL Statement Fields"</a>. <i>z/OS V1R11.0 MVS JCL Reference z/OS V1R10.0-V1R11.0</i>. IBM. 2010.</cite></li>
<li><cite id="CITEREFIBM_Corporation2007" class="citation book cs1">IBM Corporation (March 2007). <a rel="nofollow" class="external text" href="http://www.redbooks.ibm.com/redbooks/pdfs/sg247436.pdf"><i>Introduction to the New Mainframe: z/VSE Basics</i></a> <span class="cs1-format">(PDF)</span>. IBM, International Technical Support Organization. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-73-848624-6</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-12-06</span></span>.</cite></li>
<li><cite id="CITEREFAshleyFernandez1978" class="citation book cs1">Ashley, Ruth; Fernandez, Judi N. (1978). <i>Job Control Language: A Self-Teaching Guide</i>. New York: John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-471-03205-0</bdi>.</cite></li>
<li><cite id="CITEREFMcQuillen1975" class="citation book cs1">McQuillen, Kevin (1975). <i>System/360–370 Assembler Language (OS)</i>. Fresno, California: Mike Murach & Associates. <a href="LCCN_(identifier)" class="mw-redirect" title="LCCN (identifier)">LCCN</a> <a rel="nofollow" class="external text" href="https://lccn.loc.gov/74-29645">74-29645</a>.</cite></li>
<li><cite id="CITEREFSternStern1980" class="citation book cs1">Stern, Nancy; Stern, Robert A. (1980). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/structuredcobolp0000ster_v3q6"><i>Structured COBOL Programming</i></a></span> (3rd ed.). New York: John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-471-04913-1</bdi>.</cite></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox authority-control" aria-labelledby="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q1505372#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata645" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q1505372#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata645" style="font-size:114%;margin:0 4em">Authority control databases </div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">National</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh85070574">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007533717305171">Israel</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://lux.collections.yale.edu/view/concept/0ae3b243-ff30-431f-8bac-36e945c015a0">Yale LUX</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-08-02" href="https://en.wikipedia.org/wiki/?title=Job_Control_Language&oldid=1303856482">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>